#define DEBUG
#include <cstdio>
#include <cstring>
#define C 256
#define MAXN 100000

using namespace std;

int myAnd(int a, int b) {
  return a&b;
}

int myOr(int a, int b) {
  return a|b;
}

int myXor(int a, int b) {
  return a^b;
}

int main() {
  freopen("binary.in", "r", stdin);
  freopen("binary.out", "w", stdout);

  static int a[MAXN+1], f[C][C], g[C][C];
  static char opts[4];
  int (*opt)(int, int);
  int n, type;
  scanf("%d %s %d", &n, opts, &type);
  for (int i=1; i<=n; i++) {
    scanf("%d", a+i);
  }

  if (strcmp(opts, "and")==0) {
    opt=myAnd;
  } else if (strcmp(opts, "or")==0) {
    opt=myOr;
  } else {
    opt=myXor;
  }

  for (int i=1; i<=n; i++) {
    int ans=0, cnt=0, x=a[i]>>8, y=a[i]-(x<<8);
    for (int j=0; j<C; j++) {
      if ((opt(j, x)<<8)+f[j][y]>ans && g[j][y]>0) {
	ans=(opt(j, x)<<8)+f[j][y];
	cnt=0;
      }
      if ((opt(j, x)<<8)+f[j][y]==ans) {
	cnt+=g[j][y];
      }
    }

    for (int j=0; j<C; j++) {
      if (opt(y, j)>f[x][j]) {
	f[x][j]=opt(y, j);
	g[x][j]=0;
      }
      if (opt(y, j)==f[x][j]) {
	g[x][j]++;
      }
    }

    if (i>1) {
      printf(type==1 ? "%d %d\n" : "%d\n", ans, cnt);
    }
  }

  fclose(stdin);
  fclose(stdout);
  return 0;
}
